/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package UI;

import Logica.Usuario;
import Manejadores.ManejadorCargarAccion;
import Manejadores.ManejadorUsuarios;
import Persistencia.Singleton_Sesion;
import java.util.LinkedList;
import javax.swing.JOptionPane;

/**
 *
 * @author Facundo
 */
public class IUsuarios extends javax.swing.JFrame {

    ManejadorUsuarios manejadorUsuarios;
    private Singleton_Sesion sesion;
    ManejadorCargarAccion manejadorCargarAccion;

    /**
     * Creates new form IUsuarios
     */
    public IUsuarios() {
        manejadorUsuarios = new ManejadorUsuarios();
        initComponents();
        this.jTUsuarios.setModel(manejadorUsuarios.cargarTablaUsuarios());
        sesion = Singleton_Sesion.getInstancia();
        if (sesion.getUsuarioLogueado() != null) {
            this.setTitle(this.getTitle() + " - " + sesion.getUsuarioLogueado().getNombreUsuario());
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTUsuarios = new javax.swing.JTable();
        jBDeshabilitar = new javax.swing.JButton();
        jBAgregarUsuarios = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();

        setTitle("Ver todos los usuarios");
        setMaximizedBounds(new java.awt.Rectangle(0, 0, 729, 321));
        setMaximumSize(new java.awt.Dimension(729, 345));
        setMinimumSize(new java.awt.Dimension(729, 345));
        setPreferredSize(new java.awt.Dimension(729, 345));
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
        });

        jTUsuarios.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null},
                {null, null, null},
                {null, null, null},
                {null, null, null}
            },
            new String [] {
                "Nombre de usuario", "Rol", "Habilitado"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTUsuarios.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTUsuariosMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jTUsuarios);

        jBDeshabilitar.setText("Deshabilitar usuario seleccionado");
        jBDeshabilitar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBDeshabilitarActionPerformed(evt);
            }
        });

        jBAgregarUsuarios.setText("Agregar usuarios");
        jBAgregarUsuarios.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAgregarUsuariosActionPerformed(evt);
            }
        });

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 709, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jBAgregarUsuarios)
                        .addGap(18, 18, 18)
                        .addComponent(btnCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jBDeshabilitar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jBDeshabilitar)
                    .addComponent(jBAgregarUsuarios)
                    .addComponent(btnCancelar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-745)/2, (screenSize.height-358)/2, 745, 358);
    }// </editor-fold>//GEN-END:initComponents

    private void jBAgregarUsuariosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAgregarUsuariosActionPerformed
        new IAgregarUsuarios().setVisible(true);
    }//GEN-LAST:event_jBAgregarUsuariosActionPerformed

    private void jBDeshabilitarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBDeshabilitarActionPerformed
        //Pregunto si se seleccionó un solo usuario
        if (this.jTUsuarios.getSelectedRowCount() == 1) {
            if (!this.jTUsuarios.getValueAt(this.jTUsuarios.getSelectedRow(), 0).toString().equalsIgnoreCase(sesion.getUsuarioLogueado().getNombreUsuario())) {
                //Luego si el usuario seleccionado está habilitado
                if (this.jTUsuarios.getValueAt(this.jTUsuarios.getSelectedRow(), 2).toString().equalsIgnoreCase("habilitado")) {
                    //Creo el objeto Usuario a partir del seleccionado en la grilla
                    Usuario u = new Usuario();
                    u.setNombreUsuario(this.jTUsuarios.getValueAt(this.jTUsuarios.getSelectedRow(), 0).toString());
                    //El rol siempre va en minúsculas
                    u.setRol(this.jTUsuarios.getValueAt(this.jTUsuarios.getSelectedRow(), 1).toString().toLowerCase());
                    //Pregunto si está seguro
                    int n = JOptionPane.showConfirmDialog(this, "Está seguro de que desea deshabilitar este usuario? Esta acción no puede deshacerse.", "Advertencia", JOptionPane.YES_NO_OPTION);
                    //Si dijo que si buscar si el usuario tiene acciones abiertas y avisar
                    if (n == JOptionPane.YES_OPTION) {
                        //Buscar las acciones abiertas
                        LinkedList accionesAbiertas = manejadorUsuarios.accionesAbiertas(u);
                        if (!accionesAbiertas.isEmpty()) {
                            if (manejadorUsuarios.lasAccionesAbiertasSonDeUnProyectoConMasDeUnUsuario(accionesAbiertas)) {
                                //Si tiene acciones abiertas y hay mas de un usuario asignado al proyecto de todas esas acciones mostrar el panel
                                new IAsignarAccionesAbiertas(accionesAbiertas, u).setVisible(true);
                                this.setVisible(false);
                            } else {
                                JOptionPane.showMessageDialog(null, "El usuario no pudo ser deshabilitado porque es el único usuario asignado a un proyecto.");
                            }
                        } else {
                            //Si el usuario no tenía acciones abiertas llamar al manejador para que lo deshabilite
                            if (manejadorUsuarios.deshabilitarUsuario(u)) {
                                //Avisar si se hizo con éxito o no.
                                JOptionPane.showMessageDialog(null, "Usuario deshabilitado con éxito.");
                                //Vuelvo a cargar la tabla
                                this.jTUsuarios.setModel(manejadorUsuarios.cargarTablaUsuarios());
                            } else {
                                JOptionPane.showMessageDialog(null, "El usuario no pudo ser deshabilitado.");
                            }
                        }
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "El usuario seleccionado ya está deshabilitado.");
                }
            } else {
                JOptionPane.showMessageDialog(null, "No puede deshabilitar a su propio usuario.");
            }
        } else {
            JOptionPane.showMessageDialog(null, "Debe seleccionar un solo usuario.");
        }
    }//GEN-LAST:event_jBDeshabilitarActionPerformed

    private void jTUsuariosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTUsuariosMouseClicked
    }//GEN-LAST:event_jTUsuariosMouseClicked

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
        this.jTUsuarios.setModel(manejadorUsuarios.cargarTablaUsuarios());
    }//GEN-LAST:event_formWindowActivated

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnCancelarActionPerformed
    /**
     * @param args the command line arguments
     */
    //intento de metodo para ver si logramos capturar el evento de seleccion de fila
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton jBAgregarUsuarios;
    private javax.swing.JButton jBDeshabilitar;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTUsuarios;
    // End of variables declaration//GEN-END:variables
}
